module.exports = (options, app) => {
  return async (ctx, next) => {
    // 1.获取token
    const token = ctx.header.authorization || ctx.query.token
    // 2.是否有token
    if (!token) ctx.throw(401, '您没有权限访问该接口！')
    // 3.解密token,获取用户信息
    let user = {}
    try {
      user = ctx.verifyToken(token)
    } catch (error) {
      const fail =
        error.name === 'TokenExpiredError' ? 'token 已失效！请重新获取令牌' : 'Token 令牌不合法!'
      ctx.throw(401, fail)
    }
    // 4.获取当前用户，验证用户是否被禁用
    user = await ctx.service.user.findById(user.id)
    if (!user || user.status === 2) {
      ctx.throw(401, '用户不存在或已被禁用！')
    }
    // 5.把用户信息挂载到ctx
    ctx.authUser = user.toJSON()
    // 6.继续执行
    await next()
  }
}
